type Name = string; // string 类型 变为 Name 
type NameResolver = () => string // 返回字符串的函数变为 NameResolver
type NameOrNameResolver = Name | NameResolver

function getName(n:NameOrNameResolver):Name{
    if(typeof n === 'string'){
        return n; // 类型为 string 
    }else {
        return n() // 类型为 NameResolver
    }
}
// 类型 别名为 泛型
type Container<T> = { value: T };

// 类型 别用的 递归使用
type Tree<T> = {
    value: T;
    left: Tree<T>;
    right: Tree<T>;
}
// 类型别名的交叉使用
type LinkedList<T> = T & { next: LinkedList<T> };

interface Person {
    name: string;
}

var people: LinkedList<Person>;
var ssss = people.name;
var ssss = people.next.name;
var ssss = people.next.next.name;
var ssss = people.next.next.next.name;
